
import java.util.LinkedList;
import java.util.List;

public class Infeccion {
	
	private List<CasillaCiudad> casillasbrotadas;
	
	/** 
	 * @uml.property name="cartaInfeccion"
	 * @uml.associationEnd multiplicity="(0 48)" ordering="true" inverse="infeccion:CartaInfeccion"
	 */
	private List<CartaInfeccion> cartaInfeccion;

	public List<CasillaCiudad> getCasillasbrotadas() {
		return casillasbrotadas;
	}
	
	public void setCasillasbrotadas(List<CasillaCiudad> casillasbrotadas) {
		this.casillasbrotadas = casillasbrotadas;
	}

	/** 
	 * Getter of the property <tt>cartaInfeccion</tt>
	 * @return  Returns the cartaInfeccion.
	 * @uml.property  name="cartaInfeccion"
	 */
	public List<CartaInfeccion> getCartaInfeccion() {
		return cartaInfeccion;
	}

	/** 
	 * Setter of the property <tt>cartaInfeccion</tt>
	 * @param cartaInfeccion  The cartaInfeccion to set.
	 * @uml.property  name="cartaInfeccion"
	 */
	public void setCartaInfeccion(List<CartaInfeccion> cartaInfeccion) {
		this.cartaInfeccion = cartaInfeccion;
	}
	
	public CartaInfeccion robarCartaInfeccion(){
		return null;
	}
	
	public void infectarCiudad(Ciudad ciudad, Color color, int nivel){
		
		//si no se pueden colocar mas cubos en el tablero
		if(Tablero.cubosEnfermedad.get(color)==0) 
			Pandemic.finJugar(1,color);
			
		CasillaCiudad casillaciudad=Tablero.casillasCiudades.get(ciudad.getCodigo());
		NivelInfeccion nivelInfeccion=new NivelInfeccion((casillaciudad.getNivelesInfeccion().get(color).getNivel())+nivel);
		//si la casilla tiene menos de tres cubos y no ha brotado anteriormente
		if(casillaciudad.getNivelesInfeccion().get(color).getNivel()<3){
			Tablero.casillasCiudades.get(ciudad.getCodigo()).getNivelesInfeccion().put(color,nivelInfeccion);
			int cubos=Tablero.cubosEnfermedad.get(color)-nivel;
			Tablero.cubosEnfermedad.put(color,cubos);
			System.out.println(ciudad+" INFECTADA CON "+nivel+" CUBOS DE COLOR "+color);
		}
		else{
			brote(color,casillaciudad);	
		}	
	}

	private void brote(Color color, CasillaCiudad casillaciudad){
		System.out.println("*************BROTE!!!*********************");
		System.out.println("SE HA PRODUCIDO UN BROTE DE COLOR "+color+" EN "+casillaciudad.getCiudad());
		LinkedList<CasillaCiudad> adyacentes=casillaciudad.getAdyacentes();
		for(int i=0;i<adyacentes.size();i++){
			if(!getCasillasbrotadas().contains(adyacentes.get(i))){ 
				getCasillasbrotadas().add(casillaciudad);
				infectarCiudad(adyacentes.get(i).getCiudad(),color,1);
			}
		}
		Tablero.aumentarNivelBrote();//controlar en ese metodo cuando llegue a 8
	}

	public void inicializaCasillasbrotadas() {
		casillasbrotadas=new LinkedList<CasillaCiudad>();
	}

	public void borraCasillasbrotadas() {
		casillasbrotadas.removeAll(casillasbrotadas);
	}

}
